
// 模块A => 可以理解为:也是一个单独的store实例

// 1. 模块创建的思路 => 可以理解为,每个模块是一个单独的store实例
//    getters,actions中可以访问根模块的数据, 如果向访问其他模块,从根模块开始查找

// 2. 命名空间 
//     a. 默认情况下(默认false)，模块内部的 action 和 mutation 仍然是注册在全局命名空间的
//        模块中定义的 getters,mutations,actions中直接存储到根store中的

//     b. 如果命名空间设置为true，它的所有 getter、action 及 mutation 都会自动根据模块注册的路径调整命名
//        模块中定义的 getters,mutations,actions中直接存储到根store中的

export default {
    namespaced: true,  // 命名空间(默认false)
    state(){
        return {
            b:20,
        }
    },
    getters:{
        doubleB(state){
            return state.b * 2;
        },
        tripleB(state){
            return state.b * 3;
        },

        // getters中的函数可以访问当前模块的 state,getters,还可以访问根模块的getters
        // rootState  => 根store模块下的state
        // rootGetters  => 根store模块下的getters
        diamondB(state,getters,rootState,rootGetters){
            // return state.a * 4;
            console.log("访问doubleB",rootState.userInfo.adminname);
            console.log("访问doubleB",rootGetters.isLogin);
            return getters.doubleB * 2;
        }
    },
    mutations:{
        addB(state,payload){
            console.log("addA被调用",payload);
            state.b ++;
        }
    },
    actions:{
        // context和当前模块有相同属性和方法的新对象
        // context => {state,getters,rootState,rootGetters,commit,dispatch}
        addB_Async(context,payload){
            console.log("addA_Async被调用",context);
            console.log("addA_Async被调用",payload);
            
            let {commit} = context;

            return new Promise(function(resolve){
                setTimeout(()=>{
                    commit("addB"),
                    resolve();
                })
            })
        }
    }


}